Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

300
Vistas
TypeScript/Eslint arroja un error de "Promesa devuelta" en una ruta asíncrona de Express Router

Tengo la siguiente configuración de punto final para restablecer una base de datos después de las ejecuciones de prueba:

 import { getConnection } from 'typeorm'; import express from 'express'; const router = express.Router(); const resetDatabase = async (): Promise<void> => { const connection = getConnection(); await connection.dropDatabase(); await connection.synchronize(); }; // typescript-eslint throws an error in the following route: router.post('/reset', async (_request, response) => { await resetTestDatabase(); response.status(204).end(); }); export default router;

Toda la ruta desde async está subrayada con un error TypeScript-eslint Promise returned in function argument where a void return was expected.

La aplicación funciona perfectamente, pero no estoy seguro de si debería hacer una implementación más segura o simplemente ignorar/deshabilitar Eslint para esta. ¿Alguna idea de lo que está mal con ese código?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que está utilizando la regla de promesas sin uso indebido que establece que no puede devolver Promise<void> en un lugar donde se espera void .

Esto significa que no puede devolver Promise<void> desde su controlador Express porque el tipo de devolución de RequestHandler de la biblioteca especifica que el tipo de devolución debe ser void . Le sugiero que lo cambie para devolver Promise<Response> agregando una simple palabra clave de return :

 import { getConnection } from 'typeorm'; import express from 'express'; const router = express.Router(); const resetDatabase = async (): Promise<void> => { const connection = getConnection(); await connection.dropDatabase(); await connection.synchronize(); }; // typescript-eslint throws an error in the following route: router.post('/reset', async (_request, response) => { await resetTestDatabase(); return response.status(204).send(); // <----- return added here }); export default router;

La otra opción sería evitar usar async/await :

 router.post('/reset', (_request, response) => { resetDatabase().then(() => response.status(204).send()); });
over 4 years ago · Santiago Trujillo Denunciar

0

Encontré una solución que no implica usar then() y te permite usar la abstracción de async sin que el eslint te maldiga, hay dos soluciones (pero recomiendo más la segunda)

Primera solución: usar "inside async"

Esto es básico usando un asíncrono dentro del vacío como este:

 router.post('/reset', (_request, response) => { (async () => { await resetTestDatabase(); response.status(204).end(); })() });

Segunda solución (recomendada) : "Superposición de tipos"

La segunda opción es que lo uses como asíncrono, como siempre, pero di "oye, TypeScript, nada está mal aquí, jeje" con la palabra clave "as".

 import { RequestHandler } from 'express' router.post('/reset', (async (_request, response) => { await resetTestDatabase(); response.status(204).end(); }) as RequestHandler);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda